
// redux-thunk源码解读 官方源码

function createThunkMiddleware(extraArgument) {
  return ({ dispatch, getState }) => next => action => {
    if (typeof action === 'function') {
      return action(dispatch, getState, extraArgument);
    }

    return next(action);
  };
}

const thunk = createThunkMiddleware();
thunk.withExtraArgument = createThunkMiddleware;

export default thunk;

// next()函数的作用是把action对象传给下一个action处理者，或为一个中间件或为最终的reducer。
// 因此，知道它的处理机制后我们通过Redux Thunk来执行异步操作（即定义需要异步操作的的action函数）的套路就有了：



// 转成es5 
function createThunkMiddleware(extraArgument) {
  return function (_ref) {
    var dispatch = _ref.dispatch,
      getState = _ref.getState;
    return function (next) {
      return function (action) {
        if (typeof action === "function") {
          return action(dispatch, getState, extraArgument);
        }
        return next(action);
      };
    };
  };
}